package com.jcli.jb51_net.article._14855_屏幕监控_自动;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.net.URI;

/**
 * @author li
 * @version 1.0
 * @belongsProject novel_20230923
 * @belongsPackage com.jcli.jb51_net.article._14855_屏幕监控
 * @className Main
 * @description TODO  人工智能化屏幕监控窗口
 * @createTime 2024-01-28  11:04
 * 这样，当你运行程序时，会同时启动屏幕监控、打开 QQ、简单打开 QQ 和打开浏览器访问百度。记得替换路径为你本地 QQ 安装路径。
 *
 */
public class Main {
    public static void main(String[] args) {
        try {
            mvcontroll(); // 启动屏幕监控
            // midopenqq("D:\\jclisoft1\\QQ\\Bin\\QQ.exe"); // 打开QQ并且点击
            easyopenQQ("D:\\jclisoft1\\QQ\\Bin\\QQ.exe"); // 简单打开QQ
            openBrowse("http://localhost:4040"); // 打开浏览器访问百度
        } catch (AWTException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @param null
     * @return null
     * @Description TODO 实时监控屏幕窗口
     * @author li
     * @date 2024/1/28 15:18
     **/
    public static void mvcontroll() throws AWTException {
        //    建立一个屏幕监控窗口
        JFrame frame = new JFrame("人工智能化屏幕监控系统");
        frame.setSize(600, 600);
        frame.setVisible(true);
        //    设置总在顶部
        frame.setAlwaysOnTop(true);
        //    获取默认工具包
        Toolkit tk = Toolkit.getDefaultToolkit();
        //    使工具包获取屏幕大小，工具包作用
        Dimension dm = tk.getScreenSize();
        //    创建图形显示区域
        JLabel imgLabel = new JLabel();
        frame.add(imgLabel);

        /**
         * 在实际中，无限循环中更新图像的方式可能会导致性能问题，因为它不会在每次循环迭代之间进行任何延时。
         * 在一个快速的循环中不断更新 UI 通常会导致 CPU 使用率飙升。
         * 我将帮你补充完善代码，使用 Swing 提供的 Timer 来定期刷新屏幕图像，这样可以更好地控制刷新频率，避免性能问题。
         */
        /*//    创建一个机器人
        Robot robot = new Robot();
        //    持续监控屏幕
        while (true) {
            //    创建用于显示屏幕分享部分区域，填入x/y/width/height
            Rectangle rec = new Rectangle(frame.getWidth(), 0, (int) dm.getWidth() - frame.getWidth(), (int) dm.getHeight());
            //    根据屏幕分享的当前图形创建一个图形对象
            BufferedImage bufferedImage = robot.createScreenCapture(rec);
            //    实时显示在图形显示区域中
            imgLabel.setIcon(new ImageIcon(bufferedImage));
        }*/
        Timer timer = new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    Robot robot = new Robot();
                    Rectangle rec = new Rectangle(frame.getWidth(), 0, (int) dm.getWidth() - frame.getWidth(), (int) dm.getHeight());
                    BufferedImage bufferedImage = robot.createScreenCapture(rec);
                    imgLabel.setIcon(new ImageIcon(bufferedImage));
                } catch (AWTException ex) {
                    ex.printStackTrace();
                }
            }
        });
        timer.start();
    }

    /**
     * @param null
     * @return null
     * @Description TODO 打开指定路径
     * @author li
     * @date 2024/1/28 17:24
     **/
    public static void midopenqq(String path) throws Exception {
        Desktop desktop = Desktop.getDesktop();
        //    打开指定URI所指定的程序
        desktop.open(new File(path));
        //创建机器人需要时间，所有在后续操作之前加延时
        Robot robot = new Robot();
        robot.delay(2000);
        //    将robot移动到指定位置，比如qq
        robot.mouseMove(709, 519);
        //   定义鼠标按下
        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
        //    定义鼠标松开
        robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
        //    事件的延迟
        robot.delay(300);
    }

    /**
     * 简单的打开path指定的路径所在的应用程序
     *
     * @param String path
     * @return void
     * @author chengxi
     */
    public static void easyopenQQ(String path) throws Exception {
        Desktop desktop = Desktop.getDesktop();
        /* 打开指定的文件 */
        desktop.open(new File(path));
    }

    /**
     * 打开uri指定的网址
     *
     * @param String uri
     * @return void
     * @author chengxi
     */
    public static void openBrowse(String uri) throws Exception {
        /* 允许java程序使用在桌面上注册了的所有应用程序 */
        Desktop desktop = Desktop.getDesktop();
        /* 使用默认的浏览器打开指定uri */
        // desktop.browse(new URI("http://www.baidu.com"));
        desktop.browse(new URI(uri));
    }
}
